package shujia.day05;

/*
    子类可以重写父类中非私有，非静态的方法

    新需求：只允许子类使用父类中的非私有，非静态的方法，不允许重写，一旦重写就会报错

    java提供了一个关键字给我们使用final
    final: 最终的，不可改变的
    可以修饰类，变量，成员方法
    修饰成员方法：方法不能被重写，可以被继承使用
    修饰成员类：被final所修饰的类，类不能被继承
    修饰变量：被final所修饰的变量，变量变常量，不能修改变量的值。

    final修饰的变量赋值的时机：必须在构造方法完毕之前赋值，否则程序报错。



 */

//final class F{
//
//}
//
//class Z1 extends F{
//
//}

class Fu7{
    public final void show(){
        System.out.println("这是父类中的非私有，非静态的方法show");
    }
}

class Zi7 extends Fu7{
    final int A = 11;

    public void fun1(){
//        A = 12;
        System.out.println(A);
    }

//    @Override
//    public void show(){
//        System.out.println("已重写父亲的方法show");
//    }
}

class Demo2{
    int a = 10;
}

class Demo3{
    final int a;

    //使用构造代码块给final修饰的变量赋值，优先于构造方法执行
//    {
//        a =100;
//    }

    //可以在构造方法执行过程中进行赋值
    Demo3(){
        a = 200;
    }

}

public class ExtendsDemo6 {
    public static void main(String[] args) {
//        Zi7 zi7 = new Zi7();
//        zi7.show();
//        zi7.fun1();
//        Math.PI

//        final Demo2 d1 = new Demo2(); // 修饰引用数据类型变量，指的是地址值不能被修改
//        System.out.println(d1.a);
//        d1.a = 100;
//        System.out.println(d1.a);
//        d1 = new Demo2();

    }
}
